/*
    - 同步日志器 ：日志记录操作是阻塞的。当程序调用日志记录函数时，会等待日志写入操作完成（例如将日志信息写入文件或发送到网络），
                才会继续执行后续代码。整个过程是串行的，日志记录操作与业务逻辑在同一个线程中执行。
    - 异步日志器 ：日志记录操作是非阻塞的。程序调用日志记录函数后会立即返回，将日志信息放入一个缓冲区或队列中，由后台线程负责将
                缓冲区或队列中的日志信息写入目标位置。业务逻辑线程和日志写入线程是分离的。
*/

#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/async.h"
#include <iostream>

int main(int argc, char* argv[])
{
    // 1.设置全局的刷新策略
    spdlog::flush_every(std::chrono::seconds(1));                       
    spdlog::flush_on(spdlog::level::level_enum::debug);                 
    
    // 2.设置全局的日志输出等级————无所谓，每个日志器都可以单独设置
    spdlog::set_level(spdlog::level::level_enum::debug);     
    
    // 3.初始化异步日志输出线程配置
    spdlog::init_thread_pool(3072, 1);

    // 4.设置异步日志器（标准输出/文件）
    auto logger = spdlog::stdout_color_mt<spdlog::async_factory>("async-logger");         

    // 5.设置日志器的刷新策略，以及设置日志器的输出等级
        // 这里测试就用全局的策略和等级......
    
    // 6.设置日志器的格式
    logger->set_pattern("[%n][%Y-%m-%d %H:%M:%S] [%-8l] %v");

    // 7.进行简单的日志输出
    logger->trace("你好！{}", "小明1");     
    logger->debug("你好！{}", "小明2");
    logger->info("你好！{}", "小明3");
    logger->warn("你好！{}", "小明4");
    logger->error("你好！{}", "小明5");
    logger->critical("你好！{}", "小明6");

    std::cout << "日志输出完毕！" << std::endl; 

    return 0;
}
